package com.study;

import java.io.UnsupportedEncodingException;

/**
 * @Auther: Think
 * @Date: 2023/4/14 14:28
 * @Description:
 */
public class ConverGBK {

    public static void main(String[] args) throws UnsupportedEncodingException {

        //String gbk = "Error: ¾Ü¾ø·ÃÎÊ¡£";
        //String iso = new String(gbk.getBytes("ISO-8859-1"),"gbk");
        //System.out.println(iso);

        /*下面3行是es的*/
        //String gbk = "java.io.IOException: 杩滅▼涓绘満寮鸿揩鍏抽棴浜嗕竴涓  幇鏈夌殑杩炴帴銆?";
        //String iso = new String(gbk.getBytes("GBK"),"UTF-8");
        //System.out.println(iso);


        //java.io.IOException: 鏉╂粎鈻兼稉缁樻簚瀵缚鎻╅崗鎶芥４娴滃棔绔存稉顏嗗箛閺堝娈戞潻鐐村复閵�?

        /*
        java.io.IOException: 远程主机强迫关闭了一� ��有的连接�?

        https://elasticsearch.cn/question/974  这个说对了
        * ES老是报这个错误，完全看不懂，百度里面也没有 - Elastic 中文社区.mhtml
        *
        * 应该是在 Elasticsearch 的 config/jvm.options 文件里把“-Dfile.encoding=UTF-8”改为“-Dfile.encoding=GBK”
            然后重启 Elasticsearch 即可
        * */


        /*下面的没用了，删除*/
        //try {
        //
        //    ConverFromGBKToUTF8 convert = new ConverFromGBKToUTF8();
        //    byte [] fullByte = convert.gbk2utf8("¾Ü¾ø·ÃÎÊ¡£");
        //    //String fullStr = new String(fullByte, "UTF-8");
        //    String fullStr = new String(fullByte, "UTF-8");
        //    System.out.println("string from GBK to UTF-8 byte:  " + fullStr);
        //
        //
        //} catch (Exception e) {
        //    e.printStackTrace();
        //}
    }


    public static void correctEncode() throws UnsupportedEncodingException {
        String gbk = "你好呀";
        String iso = new String(gbk.getBytes("UTF-8"),"ISO-8859-1");
        for (byte b : iso.getBytes("ISO-8859-1")) {
            System.out.print(b + " ");
        }
        System.out.println();
        //模拟UTF-8编码的网站显示
        System.out.println(new String(iso.getBytes("ISO-8859-1"),"UTF-8"));
    }





    public byte[] gbk2utf8(String chenese){
        char c[] = chenese.toCharArray();
        byte [] fullByte =new byte[3*c.length];
        for(int i=0; i<c.length; i++){
            int m = (int)c[i];
            String word = Integer.toBinaryString(m);
//         System.out.println(word);

            StringBuffer sb = new StringBuffer();
            int len = 16 - word.length();
            //补零
            for(int j=0; j<len; j++){
                sb.append("0");
            }
            sb.append(word);
            sb.insert(0, "1110");
            sb.insert(8, "10");
            sb.insert(16, "10");

//         System.out.println(sb.toString());

            String s1 = sb.substring(0, 8);
            String s2 = sb.substring(8, 16);
            String s3 = sb.substring(16);

            byte b0 = Integer.valueOf(s1, 2).byteValue();
            byte b1 = Integer.valueOf(s2, 2).byteValue();
            byte b2 = Integer.valueOf(s3, 2).byteValue();
            byte[] bf = new byte[3];
            bf[0] = b0;
            fullByte[i*3] = bf[0];
            bf[1] = b1;
            fullByte[i*3+1] = bf[1];
            bf[2] = b2;
            fullByte[i*3+2] = bf[2];

        }
        return fullByte;
    }
}